﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.LightSwitch;
using Microsoft.LightSwitch.Security.Server;

namespace LightSwitchApplication
{
    public partial class ApplicationDataService
    {
        partial void MaterialiGrezzi_All_PreprocessQuery(ref IQueryable<MaterialeGrezzo> query)
        {
            query = query.OrderBy(p => p.Materiale.Descrizione).ThenBy(p => p.Sezione).ThenBy(p => p.StatoMateriale.Descrizione).ThenBy(p => p.DiametroEsterno).ThenBy(p => p.DiametroInterno).ThenBy(p => p.LatoMaggiore).ThenBy(p => p.LatoMinore).ThenBy(p => p.LatoEsagono);
        }

        partial void DettagliDocumentoQuery_PreprocessQuery(int? OrdineId, string SearchParameter, ref IQueryable<DettaglioDocumento> query)
        {
            if (!OrdineId.HasValue)
            {
                if (string.IsNullOrWhiteSpace(SearchParameter))
                {
                    query = query.Where(d => d.Documento.Archiviato == false).OrderBy(d => d.DataConsegna);
                }
                else
                {
                    query = query.Where(d => d.Documento.Archiviato == false).Where(d => d.Articolo.CodiceArticolo.Contains(SearchParameter) || d.Articolo.Descrizione.Contains(SearchParameter) || d.Documento.Anagrafica.RagioneSociale.Contains(SearchParameter) || d.Documento.CodiceDocumentoEsterno.Contains(SearchParameter)).OrderBy(d => d.DataConsegna);

                }
            }
            else if (OrdineId.HasValue)
            {
                if (string.IsNullOrWhiteSpace(SearchParameter))
                {
                    query = query.Where(d => d.Documento.Id == OrdineId.Value).OrderBy(d => d.DataConsegna);
                }
                else
                {
                    query = query.Where(d => d.Documento.Archiviato == false).Where(d => d.Articolo.CodiceArticolo.Contains(SearchParameter) || d.Articolo.Descrizione.Contains(SearchParameter) || d.Documento.Anagrafica.RagioneSociale.Contains(SearchParameter) || d.Documento.CodiceDocumentoEsterno.Contains(SearchParameter)).OrderBy(d => d.DataConsegna);
                }
            }

        }

        /// <summary>
        /// Questa query è utilizzata per la visualizzazione di ordini e di preventivi.
        /// Se archiviato è su null prendo tutti i documenti.
        /// Se tipo documento è su null prendo sia preventivi che ordini.
        /// </summary>
        /// <param name="Archiviato"></param>
        /// <param name="TipoDocumento"></param>
        /// <param name="query"></param>
        partial void OrdiniCliente_PreprocessQuery(bool? Archiviato, short? TipoDocumento, ref IQueryable<Documento> query)
        {
            if (TipoDocumento == null)
            {
                //Prendo sia preventivi che ordini
                if (Archiviato == null)
                {
                    query = query.Where(d => d.TipoDocumento == (int)LightSwitchApplication.TipoDocumento.OrdineCliente ||
                                             d.TipoDocumento == (int)LightSwitchApplication.TipoDocumento.PreventivoCliente).OrderBy(d => d.Data);
                }
                else
                {
                    query = query.Where(d => (d.TipoDocumento == (int)LightSwitchApplication.TipoDocumento.OrdineCliente ||
                                             d.TipoDocumento == (int)LightSwitchApplication.TipoDocumento.PreventivoCliente)
                                             && d.Archiviato == Archiviato.Value).OrderBy(d => d.Data);
                }
            }
            else
            {
                //Prendo sia preventivi che ordini
                if (Archiviato == null)
                {
                    query = query.Where(d => d.TipoDocumento == TipoDocumento.Value).OrderBy(d => d.Data);
                }
                else
                {
                    query = query.Where(d => d.TipoDocumento == TipoDocumento.Value && d.Archiviato == Archiviato.Value).OrderBy(d => d.Data);
                }
            }
        }

        /// <summary>
        /// Query Riepilogo Materiale
        /// </summary>
        /// <param name="OrdineId"></param>
        /// <param name="query"></param>
        partial void RiepilogoMaterialeByOrdine_PreprocessQuery(int? OrdineId, ref IQueryable<RiepilogoMateriale> query)
        {
            //if (OrdineId.HasValue)
            //    query = query.Where(o => o.Documento.Id == OrdineId.Value).OrderBy(d => d.MaterialeGrezzo.Descrizione);
        }

        partial void MaterialiGrezziQuery_PreprocessQuery(string SearchParameter, ref IQueryable<MaterialeGrezzo> query)
        {
            if (string.IsNullOrWhiteSpace(SearchParameter))
            {
                query = query.OrderBy(p => p.Materiale.Descrizione).ThenBy(p => p.Sezione).ThenBy(p => p.StatoMateriale.Descrizione).ThenBy(p => p.DiametroEsterno).ThenBy(p => p.DiametroInterno).ThenBy(p => p.LatoMaggiore).ThenBy(p => p.LatoMinore).ThenBy(p => p.LatoEsagono);
            }
            else
            {
                query = query.Where(p => p.Materiale.Descrizione.Contains(SearchParameter) || p.StatoMateriale.Descrizione.Contains(SearchParameter)).
                    OrderBy(p => p.Materiale.Descrizione).ThenBy(p => p.Sezione).ThenBy(p => p.StatoMateriale.Descrizione).ThenBy(p => p.DiametroEsterno).ThenBy(p => p.DiametroInterno).ThenBy(p => p.LatoMaggiore).ThenBy(p => p.LatoMinore).ThenBy(p => p.LatoEsagono);
            }
        }

        partial void DettagliDocumento_All_PreprocessQuery(ref IQueryable<DettaglioDocumento> query)
        {
        }

    }
}
